## Example of SLD of a ternary code

from PyM import *

def min_weight(X):
    return min([wt(x) for x in X])
    
def min_weights(X):
    m = min_weight(X)
    return [x for x in X if wt(x)==m]

def submatrix(M,J):
    return M[:,J]
   


F = Zn(3)

G = matrix(F,3,5)

G[0]=[1,0,0,2,2]
G[1]=[0,1,0,0,1]
G[2]=[0,0,1,1,0]

H = -submatrix(G,[3,4])
H = stack(H,I_(2,F))
H = transpose(H)

show(H)

C = matrix([a0*G[0]+a1*G[1]+a2*G[2] for a0 in [0,1,2] for a1 in [0,1,2] for a2 in [0,1,2]])

show(shape(C))

X = {(a,b): matrix([vector([0,0,0,a,b])+x for x in C]) for a in [0,1,2] for b in [0,1,2]}

S = X.keys() # list of syndromes

M = {s:min_weights(X[s]) for s in S}

show([(s,len(M[s])) for s in S])

E = {s:M[s][0] for s in S}

show(E)

y = vector([1,1,1,1,1])
s = y*transpose(H)
s =(lift(s[0]),lift(s[1]))
show('s:',s)
x = y-E[s]

show('y:',y)
show('x:',x)